All The reports and comments are here alongside the code just to keep everything in one place¶

Q-Learning for flagged maze¶

  • Actions: Actions are simply going LEFT, RIGHT, UP & DOWN only and only if we step into a FLAG or WAY or TARGET. Note that stepping into a BLOCK is undefined just as stepping out of board is.
  • State: States are simply the coordinates of the agent in the board and what type of block it is in(WAY or FLAG or ...) AND number of flags visited so far AND reward got so far.
  • Rewards: Rewards are just as written in the first cell in constants. And as we've explaned later visiting any block for nth time(n != 1) has reward of n*REVISITED_REWARD
  • Goal State: The goal state is to reach the TARGET with the maximum reward gathered and visited all 7 flags

First we define some constants and the initial board of the maze

  • One way to reduce the number of states is as we explaned to undefine moving to BLOCK places. This will reduce a lot of states and also moves.
In [ ]:
import copy
import numpy as np
from typing import Tuple

RUN_ALL = True

RIGHT = 'R'
LEFT = 'L'
UP = 'U'
DOWN = 'D'

WAY = 'W'
BLOCK = 'B'
TARGET = 'T'
FLAG = 'F'
REVISITED = 'R'

WAY_REWARD = -1
REVISITED_REWARD = -2
FLAG_REWARD = 30
TARGET_REWARD = 300

BASE_REWARDS = {
    WAY: WAY_REWARD,
    TARGET: TARGET_REWARD,
    FLAG: FLAG_REWARD,
    REVISITED: REVISITED_REWARD
}

ACTIONS = (RIGHT, LEFT, UP, DOWN)
BLOCK_TYPES = (WAY, TARGET, FLAG, REVISITED) # we don't need 'B' here

initBoard = [['W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'],
             ['W', 'W', 'W', 'F', 'W', 'B', 'W', 'W', 'W', 'W'],
             ['F', 'W', 'W', 'W', 'W', 'B', 'F', 'W', 'W', 'W'],
             ['B', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'W', 'W'],
             ['W', 'F', 'B', 'W', 'B', 'F', 'B', 'B', 'B', 'W'],
             ['W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W'],
             ['W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'],
             ['W', 'F', 'W', 'W', 'W', 'W', 'B', 'B', 'B', 'B'],
             ['W', 'B', 'B', 'B', 'B', 'B', 'W', 'W', 'W', 'W'],
             ['W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'F', 'T']]

All The reports and comments are here beside the code just to keep everything in one place¶

We'll try to keep everything object oriented. So here we define a class for environment.¶

It will hold a new copy of the board at the start of each episode and also will keep track of all the places we've visited and also all the flags we've visited.¶

In [ ]:
class Environment:
    def __init__(self) -> None:
        self._flagsVisited = set()
        self.initBourd()
        self.initVisitedFlags()
        self.initVisitedBlocks()

    def initVisitedFlags(self):
        self.visitedFlags = set()

    def initVisitedBlocks(self):
        self.visitedBlocks = dict()

    def initBourd(self):
        self.board = copy.deepcopy(initBoard)
    
    def addVisit(self, row: int, column: int) -> None:
        if (row, column) in self.visitedBlocks:
            self.visitedBlocks[row, column] += 1
        else:
            self.visitedBlocks[row, column] = 1
            
        if self.isFlag(row, column) and (row, column) not in self.visitedFlags:
            self.visitedFlags.add((row, column))
    
    def isFlag(self, row, column) -> bool:
        return self.board[row][column] == FLAG
    
    def isWay(self, row, column) -> bool:
        return self.board[row][column] == WAY
      
    def isTarget(self, row, column) -> bool:
        return self.board[row][column] == TARGET
    

Just a simple function that checks that whether an agnent in row and column can take action in environment env or not¶

Note that we treat BLOCKs just like any place out of the matrix of the board. Agent cannot go to a BLOCK as it cannot go out of board¶

In [ ]:
def checkAction(row: int, column: int, action: str) -> bool:
    if action == RIGHT:
        return column + 1 < len(initBoard[0]) and initBoard[row][column + 1] != BLOCK
    elif action == LEFT:
        return column - 1 >=0 and initBoard[row][column - 1] != BLOCK
    elif action == UP:
        return row - 1 >= 0 and initBoard[row - 1][column] != BLOCK
    elif action == DOWN:
        return row + 1 < len(initBoard) and initBoard[row + 1][column] != BLOCK
    else:
        raise Exception("Unknown action")
    
def getNextPosition(row: int, column: int, action: str):
    if checkAction(row, column, action) and action in ACTIONS:
        if action == RIGHT:
            return row, column + 1
        elif action == LEFT:
            return row, column - 1
        elif action == UP:
            return row - 1, column
        elif action == DOWN:
            return row + 1, column
        else:
            raise Exception("Unknown action")
    else:
        return -1, -1
    

Here we create a class for a state that holds the row, column and env, It will also keep track of total awards gathered so far¶

It also has some useful functionalities like addReward and move and action¶

In [ ]:
class State:
    # FLAG_VISIT_REWARD_RATE = 2
    def __init__(self, row, column, env: Environment):
        self.row = row
        self.column = column
        self.rewardSoFar = 0
        self.env = env

    def addReward(self, newReward: int): # add the reward to total rewards
        self.rewardSoFar += newReward

    def setReward(self, reward: int):
        self.rewardSoFar = reward

    def move(self, newRow: int, newColumn: int): # if it can move, it changes row and column
        if(0 <= newRow and newRow < len(self.env.board) and 0 <= newColumn and newColumn < len(self.env.board[0]) and self.env.board[newRow][newColumn] != BLOCK):
            self.row = newRow
            self.column = newColumn
        else:
            raise IndexError("The action will cause the agent to get out of the bourd or to a block point")
    
    def action(self, action: str): # if the action is OK and valid it takes it and move
        if(action in ACTIONS):
            if action == RIGHT:
                self.move(self.row, self.column + 1)
            elif action == LEFT:
                self.move(self.row, self.column - 1)
            elif action == UP:
                self.move(self.row - 1, self.column)
            else: # definitely DOWN
                self.move(self.row + 1, self.column)
        else:
            raise Exception(f"Unknown type of action: {action}")

    def __str__(self) -> str:
        return f"{self.row, self.column}"

For the main Q Function we also created a callable class!¶

Since we'll have to try many factors and run several times we need to manage all these Q tables and stuff.,
This class will hold the __qTable (q-table) and has an update method to update it.
And to be complete we overloaded a callable to call the Q function related to this q-table¶

what what we keep in our table?¶

since this a flagged maze and lots of scenarios may happen we need to know more than "where are we and what action to take". We also need to know that if we're at row and column and take some action to which type of block we'll go. So out entries in q-table will look like (row, column, action, blockTypeWeWillGo).¶

In [ ]:
ALPHA = 0.9
GAMMA = 0.25
# The object for Q function
# we decided to create a class for it to hold the info
class Q:

    def __init__(self) -> None:
        self.__qTable = dict()
        for i in range(len(initBoard)):
            for j in range(len(initBoard[0])):
                if initBoard[i][j] != BLOCK:        
                    for action in ACTIONS:
                        nextPosition = getNextPosition(i, j, action)
                        if nextPosition != (-1, -1):
                            nextBlockType = initBoard[nextPosition[0]][nextPosition[1]]
                            
                            self.__qTable[i, j, action, nextBlockType] = BASE_REWARDS[nextBlockType]
                            
                            self.__qTable[i, j, action, REVISITED] = REVISITED_REWARD                            
                            
    def getTable(self):
        return copy.deepcopy(self.__qTable)
    
    def update(self, 
               row: int,
               column: int, 
               action: str, 
               blockType: str,
               oldValue: int, 
               reward: int, 
               maxQ: int) -> None:
        
        # print(f"updated from {(row, column, action, blockType)} = {self.__qTable[row, column, action, blockType]} to ", end='')
        updatedValue = oldValue + ALPHA*(reward + GAMMA*maxQ - oldValue)
        self.__qTable[row, column, action, blockType] = updatedValue
        # print(f"{oldValue + ALPHA*(reward + GAMMA*maxQ - oldValue)}", end=' | ')
        
    def __call__(self, state: State, action: str, env: Environment) -> tuple[State, int]:
        nextState = copy.deepcopy(state)
        nextState.action(action)
        return self.__qTable[state.row, state.column, action, env.board[nextState.row][nextState.column]]
        
        

Here we have some usefull functions used in the main algorithm:¶

  • chooseRandomAction: will return a valid randomly choosen action based on the state and the environment.

  • getBestQ: will take state and env and q function and will return what's the best policy(best action) based on q-table in q function and what will be its q-value

  • getReward: simply return the reward based on the row and column we've stepped into in env

    • if we've stepped into nth flag we'll get n*FLAG_REWARD. This will encourage the engine to visite more flags on the way
    • if we've stepped into target or way we'll get TARGET_REWARD or WAY_REWARD
    • if we've stepped into a place that we're visiting for nth time we'll get n*REVISIT_REWARD (which will be negative and is a big punish!)
In [ ]:
import random
def chooseRandomAction(state: State, env: Environment) -> str:
    row, column = state.row, state.column
    okay = False
    randomAction = None
    choices = list(ACTIONS)
    while not okay:
        randomAction = random.choice(choices)
        if checkAction(row, column, randomAction):
            okay = True
        choices.remove(randomAction)

    return randomAction

def getBestQ(state: State, env: Environment, q: Q) -> int:
    maxQ = -np.inf
    bestAction = None
    for action in ACTIONS:
        if checkAction(state.row, state.column, action):
            qValue = q(state, action, env)
            if(maxQ < qValue):
                maxQ = qValue
                bestAction = action
            maxQ = np.max([maxQ, qValue])
    return bestAction, maxQ

def getReward(row: int, column: int, env: Environment):
    if env.isFlag(row, column):
        return FLAG_REWARD * (len(env.visitedFlags)+1)
    if env.isTarget(row, column):
        return TARGET_REWARD
    if env.isWay(row, column):
        return WAY_REWARD
    if (row, column) in env.visitedBlocks: # visited
        return env.visitedBlocks[row, column] * REVISITED_REWARD
    

The algorithm¶

To have the algorithm run more efficiently we implement an idea: To maintain a balance between exploration and explotation.¶

The idea is that when we want to start an episode we explote until where we've learned well and as we reach the area that we haven't learned well, we start to explore and learn. To do so, assume that we're about to run an episode n times. We'll explote in the first n/5 steps(itteration) and explore in the next 4n/5 steps(itterations). And to progress gradually, we run 1st episode 1 itteration, 2nd epidose 2 itterations and nth episode n itterations ..¶

Episode class¶

In Episode class we keep track of each episode progress info.¶

  • The runNTimes method will run this episode n times. Which will explote n/5 steps and explore 4n/5 steps as explaned above

  • The runOneItter is the core of the algorithm and runs one itteration of the episode and return True if it has reached the target

Note that we also have a AWARD_LIMIT which is actually punish limit. Each episode will stop running whenever it "runs n steps" OR it gets rewards "less that this limit"¶

In [ ]:
AWARD_LIMIT = -300

class Episode:
    def __init__(self, qFunction: Q) -> None:
        self.env = Environment()
        self.state = State(0, 0, self.env)
        self.env.addVisit(0, 0)
        self.env.board[0][0] = REVISITED
        self.qFunction = qFunction
        
    def runNTimes(self, n: int):
        # print(f"------------------------A new Episode started that will run at most {n} itterations-----------------------------")
        
        # print("==============explotation==================")
            
        for itterNumber in range(n//5):
            if self.runOneItter(getBestQ(self.state, self.env, self.qFunction)[0]) or self.state.rewardSoFar < AWARD_LIMIT:
                return
        # print("==============exploration==================")
        for itterNumber in range(4*n//5):
            if self.runOneItter(chooseRandomAction(self.state, self.env)) or self.state.rewardSoFar < AWARD_LIMIT:
                return
            
        
    def runOneItter(self, action):
        # print(f"going {action}", end=' | ')
        
        nextState = copy.deepcopy(self.state)
        nextState.action(action)

        
        # print(f"to {nextState.row, nextState.column}", end= " | ")
        
        oldQValue = self.qFunction(self.state, action, self.env)
        oldBlockType = self.env.board[nextState.row][nextState.column]
        
        reward = getReward(nextState.row, nextState.column, self.env)
        nextState.addReward(reward)
        # print(f"reward so far: {self.state.rewardSoFar}", end= " | ")
        # print(f"Reward {reward}", end=' | ')
        
        # update env
        self.env.addVisit(nextState.row, nextState.column)
        self.env.board[nextState.row][nextState.column] = REVISITED
        
        bestQ = getBestQ(nextState, self.env, self.qFunction)                
        
        self.qFunction.update(self.state.row, self.state.column, action, oldBlockType, oldQValue, reward, bestQ[1])
        
        self.state = nextState
        if (self.state.row, self.state.column) == (len(initBoard)-1, len(initBoard[0])-1):
            # print()
            return True
            
        
        # print()
        return False
        
2 simple function¶
  • runAlgorithm: runs the algorithm with the stategy explaned above with n episodes

  • reportResults: reports the result of the algorimth after learning its q-table. It takes the q object and follow its table until it reaches the target.

In [ ]:
def runAlgorithm(n) -> Q:
    qFunction = Q()
    for episodeNum in range(n):
        episode = Episode(qFunction)
        episode.runNTimes(episodeNum+1)    
    return qFunction
       

def reportResult(q: Q):
    env = Environment()
    state = State(0, 0, env)
    print(f"getting reward {getReward(state.row, state.column, env)}", end=" ") 
    env.addVisit(0, 0)
    env.board[state.row][state.column] = REVISITED
    limit = 60 # the actual path length is 51
    rewardSoFar = -1 # including starging point
    qValueSoFar = 0
    numOfFlagsVisited = 0
    for stepNum in range(limit):
        action, maxQ = getBestQ(state, env, q)
        
        qValueSoFar += maxQ
        
        print(f"[#{stepNum+1}] {state} going {action} to:")
        state.action(action)
        
        rewardSoFar += getReward(state.row, state.column, env)
        print(f"getting reward {getReward(state.row, state.column, env)}", end=" ")
        
        if(env.isFlag(state.row, state.column)):
            numOfFlagsVisited += 1
            
        env.addVisit(state.row, state.column)
        env.board[state.row][state.column] = REVISITED
        
        if (state.row, state.column) == (len(initBoard)-1, len(initBoard[0])-1):
            print(state)
            print(f"Finished with path length:{stepNum}, flags visited: {numOfFlagsVisited}, Total reward: {rewardSoFar}, TotalQValueEarned: {qValueSoFar}")
            break
    else:
        print(f"Failed!")

Time to run the algorithm¶

Run 700 episodes such that nth episode will run n itterations One of the best paramter set is (alpha = 0.9, gamma = 0.25) as we set above


Testing with

  • gamma = 0.5
  • alpha = 0.9
In [ ]:
if RUN_ALL:
    q = runAlgorithm(700)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going D to:
getting reward 30 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward -1 [#5] (2, 2) going U to:
getting reward -1 [#6] (1, 2) going R to:
getting reward 60 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going D to:
getting reward 90 [#13] (2, 6) going R to:
getting reward -1 [#14] (2, 7) going R to:
getting reward -1 [#15] (2, 8) going D to:
getting reward -1 [#16] (3, 8) going R to:
getting reward -1 [#17] (3, 9) going D to:
getting reward -1 [#18] (4, 9) going D to:
getting reward -1 [#19] (5, 9) going L to:
getting reward -1 [#20] (5, 8) going L to:
getting reward -1 [#21] (5, 7) going L to:
getting reward -1 [#22] (5, 6) going L to:
getting reward -1 [#23] (5, 5) going U to:
getting reward 120 [#24] (4, 5) going D to:
getting reward -2 [#25] (5, 5) going D to:
getting reward -1 [#26] (6, 5) going L to:
getting reward -1 [#27] (6, 4) going L to:
getting reward -1 [#28] (6, 3) going L to:
getting reward -1 [#29] (6, 2) going D to:
getting reward -1 [#30] (7, 2) going L to:
getting reward 150 [#31] (7, 1) going U to:
getting reward -1 [#32] (6, 1) going U to:
getting reward -1 [#33] (5, 1) going U to:
getting reward 180 [#34] (4, 1) going L to:
getting reward -1 [#35] (4, 0) going D to:
getting reward -1 [#36] (5, 0) going D to:
getting reward -1 [#37] (6, 0) going D to:
getting reward -1 [#38] (7, 0) going D to:
getting reward -1 [#39] (8, 0) going D to:
getting reward -1 [#40] (9, 0) going R to:
getting reward -1 [#41] (9, 1) going R to:
getting reward -1 [#42] (9, 2) going R to:
getting reward -1 [#43] (9, 3) going R to:
getting reward -1 [#44] (9, 4) going R to:
getting reward -1 [#45] (9, 5) going R to:
getting reward -1 [#46] (9, 6) going U to:
getting reward -1 [#47] (8, 6) going R to:
getting reward -1 [#48] (8, 7) going R to:
getting reward -1 [#49] (8, 8) going D to:
getting reward 210 [#50] (9, 8) going R to:
getting reward 300 (9, 9)
Finished with path length:49, flags visited: 7, Total reward: 1096, TotalQValueEarned: 1460.1745804415784

Results:

  • outcome: sucess
  • time: 22.6s


Testing with

  • gamma = 0.5
  • alpha = 0.9
In [ ]:
if RUN_ALL:
    GAMMA = 0.5
    q = runAlgorithm(700)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going D to:
getting reward 30 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward -1 [#5] (2, 2) going R to:
getting reward -1 [#6] (2, 3) going U to:
getting reward 60 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going D to:
getting reward 90 [#13] (2, 6) going R to:
getting reward -1 [#14] (2, 7) going U to:
getting reward -1 [#15] (1, 7) going R to:
getting reward -1 [#16] (1, 8) going R to:
getting reward -1 [#17] (1, 9) going D to:
getting reward -1 [#18] (2, 9) going D to:
getting reward -1 [#19] (3, 9) going D to:
getting reward -1 [#20] (4, 9) going D to:
getting reward -1 [#21] (5, 9) going L to:
getting reward -1 [#22] (5, 8) going L to:
getting reward -1 [#23] (5, 7) going L to:
getting reward -1 [#24] (5, 6) going L to:
getting reward -1 [#25] (5, 5) going U to:
getting reward 120 [#26] (4, 5) going D to:
getting reward -2 [#27] (5, 5) going D to:
getting reward -1 [#28] (6, 5) going L to:
getting reward -1 [#29] (6, 4) going L to:
getting reward -1 [#30] (6, 3) going L to:
getting reward -1 [#31] (6, 2) going D to:
getting reward -1 [#32] (7, 2) going L to:
getting reward 150 [#33] (7, 1) going U to:
getting reward -1 [#34] (6, 1) going U to:
getting reward -1 [#35] (5, 1) going U to:
getting reward 180 [#36] (4, 1) going L to:
getting reward -1 [#37] (4, 0) going D to:
getting reward -1 [#38] (5, 0) going D to:
getting reward -1 [#39] (6, 0) going D to:
getting reward -1 [#40] (7, 0) going D to:
getting reward -1 [#41] (8, 0) going D to:
getting reward -1 [#42] (9, 0) going R to:
getting reward -1 [#43] (9, 1) going R to:
getting reward -1 [#44] (9, 2) going R to:
getting reward -1 [#45] (9, 3) going R to:
getting reward -1 [#46] (9, 4) going R to:
getting reward -1 [#47] (9, 5) going R to:
getting reward -1 [#48] (9, 6) going U to:
getting reward -1 [#49] (8, 6) going R to:
getting reward -1 [#50] (8, 7) going R to:
getting reward -1 [#51] (8, 8) going D to:
getting reward 210 [#52] (9, 8) going R to:
getting reward 300 (9, 9)
Finished with path length:51, flags visited: 7, Total reward: 1094, TotalQValueEarned: 2173.5493091430394

Results:

  • outcome: sucess but 2 extra moves (Not optimal)
  • time: 28.4s


Testing with

  • gamma = 1
  • alpha = 0.9
In [ ]:
if RUN_ALL:
    GAMMA = 1
    q = runAlgorithm(800)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going R to:
getting reward -1 [#3] (1, 1) going R to:
getting reward -1 [#4] (1, 2) going U to:
getting reward -1 [#5] (0, 2) going R to:
getting reward -1 [#6] (0, 3) going D to:
getting reward 30 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going R to:
getting reward -1 [#13] (1, 7) going R to:
getting reward -1 [#14] (1, 8) going D to:
getting reward -1 [#15] (2, 8) going D to:
getting reward -1 [#16] (3, 8) going R to:
getting reward -1 [#17] (3, 9) going D to:
getting reward -1 [#18] (4, 9) going D to:
getting reward -1 [#19] (5, 9) going L to:
getting reward -1 [#20] (5, 8) going L to:
getting reward -1 [#21] (5, 7) going L to:
getting reward -1 [#22] (5, 6) going L to:
getting reward -1 [#23] (5, 5) going D to:
getting reward -1 [#24] (6, 5) going L to:
getting reward -1 [#25] (6, 4) going L to:
getting reward -1 [#26] (6, 3) going D to:
getting reward -1 [#27] (7, 3) going L to:
getting reward -1 [#28] (7, 2) going L to:
getting reward 60 [#29] (7, 1) going U to:
getting reward -1 [#30] (6, 1) going U to:
getting reward -1 [#31] (5, 1) going U to:
getting reward 90 [#32] (4, 1) going L to:
getting reward -1 [#33] (4, 0) going D to:
getting reward -1 [#34] (5, 0) going D to:
getting reward -1 [#35] (6, 0) going R to:
getting reward -2 [#36] (6, 1) going R to:
getting reward -1 [#37] (6, 2) going R to:
getting reward -2 [#38] (6, 3) going D to:
getting reward -2 [#39] (7, 3) going R to:
getting reward -1 [#40] (7, 4) going R to:
getting reward -1 [#41] (7, 5) going U to:
getting reward -2 [#42] (6, 5) going R to:
getting reward -1 [#43] (6, 6) going R to:
getting reward -1 [#44] (6, 7) going R to:
getting reward -1 [#45] (6, 8) going R to:
getting reward -1 [#46] (6, 9) going U to:
getting reward -2 [#47] (5, 9) going U to:
getting reward -2 [#48] (4, 9) going U to:
getting reward -2 [#49] (3, 9) going L to:
getting reward -2 [#50] (3, 8) going L to:
getting reward -1 [#51] (3, 7) going U to:
getting reward -1 [#52] (2, 7) going L to:
getting reward 120 [#53] (2, 6) going U to:
getting reward -2 [#54] (1, 6) going D to:
getting reward -2 [#55] (2, 6) going U to:
getting reward -4 [#56] (1, 6) going D to:
getting reward -4 [#57] (2, 6) going U to:
getting reward -6 [#58] (1, 6) going D to:
getting reward -6 [#59] (2, 6) going U to:
getting reward -8 [#60] (1, 6) going D to:
getting reward -8 Failed!

Results:

  • outcome: Failiar
  • time: 1m 1.5s


Testing with

  • gamma = 0.25
  • alpha = 0.8

GAMMA:¶

As we saw, the higher the GAMMA is, the more effect the best next Qs has and makes the algorithm takes longer and also not give the optimal answer sometimes. If it gets so high it may even cause the algorithm now converge and fail to reach the target

In [ ]:
if RUN_ALL:
    GAMMA = 0.25
    ALPHA = 0.8
    q = runAlgorithm(700)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going D to:
getting reward 30 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward -1 [#5] (2, 2) going U to:
getting reward -1 [#6] (1, 2) going R to:
getting reward 60 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going D to:
getting reward 90 [#13] (2, 6) going R to:
getting reward -1 [#14] (2, 7) going R to:
getting reward -1 [#15] (2, 8) going D to:
getting reward -1 [#16] (3, 8) going R to:
getting reward -1 [#17] (3, 9) going D to:
getting reward -1 [#18] (4, 9) going D to:
getting reward -1 [#19] (5, 9) going L to:
getting reward -1 [#20] (5, 8) going L to:
getting reward -1 [#21] (5, 7) going L to:
getting reward -1 [#22] (5, 6) going L to:
getting reward -1 [#23] (5, 5) going U to:
getting reward 120 [#24] (4, 5) going U to:
getting reward -1 [#25] (3, 5) going D to:
getting reward -2 [#26] (4, 5) going D to:
getting reward -2 [#27] (5, 5) going D to:
getting reward -1 [#28] (6, 5) going L to:
getting reward -1 [#29] (6, 4) going L to:
getting reward -1 [#30] (6, 3) going L to:
getting reward -1 [#31] (6, 2) going D to:
getting reward -1 [#32] (7, 2) going L to:
getting reward 150 [#33] (7, 1) going U to:
getting reward -1 [#34] (6, 1) going U to:
getting reward -1 [#35] (5, 1) going U to:
getting reward 180 [#36] (4, 1) going L to:
getting reward -1 [#37] (4, 0) going D to:
getting reward -1 [#38] (5, 0) going D to:
getting reward -1 [#39] (6, 0) going D to:
getting reward -1 [#40] (7, 0) going D to:
getting reward -1 [#41] (8, 0) going D to:
getting reward -1 [#42] (9, 0) going R to:
getting reward -1 [#43] (9, 1) going R to:
getting reward -1 [#44] (9, 2) going R to:
getting reward -1 [#45] (9, 3) going R to:
getting reward -1 [#46] (9, 4) going R to:
getting reward -1 [#47] (9, 5) going R to:
getting reward -1 [#48] (9, 6) going U to:
getting reward -1 [#49] (8, 6) going R to:
getting reward -1 [#50] (8, 7) going R to:
getting reward -1 [#51] (8, 8) going D to:
getting reward 210 [#52] (9, 8) going R to:
getting reward 300 (9, 9)
Finished with path length:51, flags visited: 7, Total reward: 1093, TotalQValueEarned: 1456.1745804415787

Results:

  • outcome: sucess but two extra moves
  • time: 28.7s


Testing with

  • gamma = 0.25
  • alpha = 0.7
In [ ]:
if RUN_ALL:
    ALPHA = 0.7
    q = runAlgorithm(700)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going D to:
getting reward 30 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward -1 [#5] (2, 2) going U to:
getting reward -1 [#6] (1, 2) going R to:
getting reward 60 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going D to:
getting reward 90 [#13] (2, 6) going R to:
getting reward -1 [#14] (2, 7) going R to:
getting reward -1 [#15] (2, 8) going R to:
getting reward -1 [#16] (2, 9) going D to:
getting reward -1 [#17] (3, 9) going D to:
getting reward -1 [#18] (4, 9) going D to:
getting reward -1 [#19] (5, 9) going L to:
getting reward -1 [#20] (5, 8) going L to:
getting reward -1 [#21] (5, 7) going L to:
getting reward -1 [#22] (5, 6) going L to:
getting reward -1 [#23] (5, 5) going U to:
getting reward 120 [#24] (4, 5) going D to:
getting reward -2 [#25] (5, 5) going D to:
getting reward -1 [#26] (6, 5) going L to:
getting reward -1 [#27] (6, 4) going D to:
getting reward -1 [#28] (7, 4) going L to:
getting reward -1 [#29] (7, 3) going L to:
getting reward -1 [#30] (7, 2) going L to:
getting reward 150 [#31] (7, 1) going U to:
getting reward -1 [#32] (6, 1) going U to:
getting reward -1 [#33] (5, 1) going U to:
getting reward 180 [#34] (4, 1) going L to:
getting reward -1 [#35] (4, 0) going D to:
getting reward -1 [#36] (5, 0) going D to:
getting reward -1 [#37] (6, 0) going D to:
getting reward -1 [#38] (7, 0) going D to:
getting reward -1 [#39] (8, 0) going D to:
getting reward -1 [#40] (9, 0) going R to:
getting reward -1 [#41] (9, 1) going R to:
getting reward -1 [#42] (9, 2) going R to:
getting reward -1 [#43] (9, 3) going R to:
getting reward -1 [#44] (9, 4) going R to:
getting reward -1 [#45] (9, 5) going R to:
getting reward -1 [#46] (9, 6) going U to:
getting reward -1 [#47] (8, 6) going R to:
getting reward -1 [#48] (8, 7) going R to:
getting reward -1 [#49] (8, 8) going D to:
getting reward 210 [#50] (9, 8) going R to:
getting reward 300 (9, 9)
Finished with path length:49, flags visited: 7, Total reward: 1096, TotalQValueEarned: 1460.1745804415784

Results:

  • outcome: sucess
  • time: 27.2s


Testing with

  • gamma = 0.25
  • alpha = 0.6
In [ ]:
if RUN_ALL:
    ALPHA = 0.6
    q = runAlgorithm(700)
    reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going D to:
getting reward 30 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward -1 [#5] (2, 2) going R to:
getting reward -1 [#6] (2, 3) going U to:
getting reward 60 [#7] (1, 3) going R to:
getting reward -1 [#8] (1, 4) going U to:
getting reward -1 [#9] (0, 4) going R to:
getting reward -1 [#10] (0, 5) going R to:
getting reward -1 [#11] (0, 6) going D to:
getting reward -1 [#12] (1, 6) going D to:
getting reward 90 [#13] (2, 6) going R to:
getting reward -1 [#14] (2, 7) going R to:
getting reward -1 [#15] (2, 8) going D to:
getting reward -1 [#16] (3, 8) going R to:
getting reward -1 [#17] (3, 9) going D to:
getting reward -1 [#18] (4, 9) going D to:
getting reward -1 [#19] (5, 9) going L to:
getting reward -1 [#20] (5, 8) going L to:
getting reward -1 [#21] (5, 7) going L to:
getting reward -1 [#22] (5, 6) going L to:
getting reward -1 [#23] (5, 5) going U to:
getting reward 120 [#24] (4, 5) going U to:
getting reward -1 [#25] (3, 5) going D to:
getting reward -2 [#26] (4, 5) going D to:
getting reward -2 [#27] (5, 5) going D to:
getting reward -1 [#28] (6, 5) going L to:
getting reward -1 [#29] (6, 4) going L to:
getting reward -1 [#30] (6, 3) going D to:
getting reward -1 [#31] (7, 3) going L to:
getting reward -1 [#32] (7, 2) going L to:
getting reward 150 [#33] (7, 1) going U to:
getting reward -1 [#34] (6, 1) going U to:
getting reward -1 [#35] (5, 1) going U to:
getting reward 180 [#36] (4, 1) going L to:
getting reward -1 [#37] (4, 0) going D to:
getting reward -1 [#38] (5, 0) going D to:
getting reward -1 [#39] (6, 0) going D to:
getting reward -1 [#40] (7, 0) going D to:
getting reward -1 [#41] (8, 0) going D to:
getting reward -1 [#42] (9, 0) going R to:
getting reward -1 [#43] (9, 1) going R to:
getting reward -1 [#44] (9, 2) going R to:
getting reward -1 [#45] (9, 3) going R to:
getting reward -1 [#46] (9, 4) going R to:
getting reward -1 [#47] (9, 5) going R to:
getting reward -1 [#48] (9, 6) going U to:
getting reward -1 [#49] (8, 6) going R to:
getting reward -1 [#50] (8, 7) going R to:
getting reward -1 [#51] (8, 8) going D to:
getting reward 210 [#52] (9, 8) going R to:
getting reward 300 (9, 9)
Finished with path length:51, flags visited: 7, Total reward: 1093, TotalQValueEarned: 1456.1745804415787

Results:

  • outcome: sucess but two extra moves
  • time: 29.5s

ALPHA:¶

As we saw, the lower the alpha is the more effect the old-Q-value will have and makes the algorithm takes longer and also not give the optimal answer sometimes

Draw The Graph¶

In [ ]:
import matplotlib.pyplot as plt
import networkx as nx


def drawGraph(table: dict[tuple: int]):
    fig = plt.figure(figsize=(25, 25))
    G = nx.DiGraph()
    added_edges = set()
    for key in table:
        row1, column1, action, blockType2 = key
        blockType1 = initBoard[row1][column1]
        row2, column2 = getNextPosition(row1, column1, action)
        if( ((row1, column1, blockType1) , (row2, column2, blockType2)) not in added_edges):
            G.add_edge(f"{row1},{column1},{blockType1}", f"{row2},{column2},{blockType2}", weight=round(table[key], 3))
    
        if( ((row1, column1, REVISITED) , (row2, column2, blockType2)) not in added_edges):
            G.add_edge(f"{row1},{column1},{blockType1}", f"{row2},{column2},{blockType2}", weight=round(table[key], 3))

    edges = [(u, v) for (u, v, d) in G.edges(data=True)]
    pos = nx.spring_layout(G) 
    
    nx.draw_networkx_nodes(G, pos, node_size=600)
    nx.draw_networkx_edges(G, pos, edgelist=edges, width=2)
    
    nx.draw_networkx_labels(G, pos, font_size=10)

    edge_labels = nx.get_edge_attributes(G, "weight")
    
    nx.draw_networkx_edge_labels(G, pos, edge_labels, font_size=7)
    
    ax = plt.gca()
    ax.margins(0.08)
    ax.figure.set_size_inches(25, 25)
    plt.axis("off")
    plt.tight_layout()
    plt.show()
        
        
In [ ]:
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
In [ ]:
drawGraph(q.getTable())

Drawing Q-table¶

In [ ]:
from tabulate import tabulate
def getTable(q: Q):
    qtable = q.getTable()
    matrix = [[*key, qtable[key]] for key in qtable]
    return tabulate(matrix, headers=("row", "column", "action", "toBlockType", "award"), tablefmt="double_grid")

print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═════════════╗
║   row ║   column ║ action   ║ toBlockType   ║       award ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ D        ║ W             ║   6.47626   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ D        ║ R             ║ -10.5897    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ R        ║ W             ║  -1.22503   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ R        ║ R             ║  -5.84076   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ D        ║ R             ║  -8.70023   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ R        ║ W             ║  -0.977864  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ R        ║ R             ║ -12.7548    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ L        ║ W             ║  -3.06276   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ L        ║ R             ║  -5.07955   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ D        ║ F             ║  56.775     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        3 ║ D        ║ R             ║  -4.25301   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ R        ║ W             ║   0.0885421 ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ R        ║ R             ║  -9.04842   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ L        ║ W             ║  -1.33739   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ L        ║ R             ║  -8.45047   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ D        ║ W             ║  -1.33903   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ D        ║ R             ║  -7.56148   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ R        ║ W             ║   4.35417   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ R        ║ R             ║  -4.94758   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ L        ║ R             ║  -6.07498   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ R        ║ W             ║  -1.38118   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ R        ║ R             ║ -10.1531    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ L        ║ R             ║  -5.1141    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ D        ║ W             ║  21.4167    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ D        ║ R             ║  -6.59407   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ R        ║ W             ║  -1.40321   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ R        ║ R             ║  -8.12388   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ L        ║ R             ║  -5.01782   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ D        ║ W             ║  -1.77575   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ D        ║ R             ║ -12.4965    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ R        ║ W             ║  -1.33644   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ R        ║ R             ║  -4.40777   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ L        ║ W             ║  -1.46005   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ L        ║ R             ║  -8.54369   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ D        ║ W             ║  -1.35781   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ D        ║ R             ║ -13.8612    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ L        ║ W             ║  -1.3343    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ L        ║ R             ║ -10.2505    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ D        ║ W             ║  -1.42573   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ D        ║ R             ║  -2.90216   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ R        ║ W             ║   1.92572   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ R        ║ R             ║  -6.937     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ U        ║ R             ║  -3.91376   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ D        ║ F             ║  29.905     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ D        ║ R             ║ -13.2218    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ R        ║ W             ║  13.9222    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ R        ║ R             ║ -14.2709    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ L        ║ R             ║  -4.38017   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ D        ║ W             ║  -0.264475  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ D        ║ R             ║  -2.94489   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ R        ║ F             ║  59.6889    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ R        ║ R             ║  -8.2636    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ L        ║ W             ║  -1.43638   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ L        ║ R             ║  -3.14481   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ U        ║ W             ║  -3.02016   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ U        ║ R             ║  -7.81804   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ D        ║ W             ║  -1.35416   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        2 ║ D        ║ R             ║  -9.9066    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ R        ║ W             ║  -1.38943   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ R        ║ R             ║ -10.9329    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ L        ║ R             ║  -3.94409   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ U        ║ W             ║  -1.24447   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ U        ║ R             ║  -7.61337   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ D        ║ W             ║  -1.40177   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ D        ║ R             ║  -2.72813   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ L        ║ F             ║  30         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ L        ║ R             ║ -16.3715    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ U        ║ W             ║  -1.21639   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ U        ║ R             ║ -15.3175    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ D        ║ W             ║  -2.08293   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        4 ║ D        ║ R             ║  -6.7601    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ R        ║ W             ║  -1.33355   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ R        ║ R             ║ -14.0322    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ U        ║ R             ║  -3.12404   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ D        ║ F             ║  89.6667    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ D        ║ R             ║  -3.15006   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ R        ║ W             ║  -1.33391   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ R        ║ R             ║ -12.7041    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ L        ║ W             ║  19.1781    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ L        ║ R             ║  -4.61767   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ U        ║ W             ║  -1.49531   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ U        ║ R             ║  -4.34359   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ D        ║ W             ║  20.7723    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ D        ║ R             ║ -10.1233    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ R        ║ W             ║  -1.33562   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ R        ║ R             ║ -10.3634    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ L        ║ W             ║  -1.50977   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ L        ║ R             ║  -4.61251   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ U        ║ W             ║  -1.39519   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ U        ║ R             ║  -3.29751   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ D        ║ W             ║  -2.49847   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ D        ║ R             ║  -8.36552   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ L        ║ W             ║  -1.34751   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ L        ║ R             ║ -10.2648    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ U        ║ W             ║  -1.33359   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ U        ║ R             ║  -9.34595   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ D        ║ W             ║  -1.74288   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ D        ║ R             ║  -3.25143   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ R        ║ W             ║  -0.379861  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ R        ║ R             ║ -10.6234    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ U        ║ R             ║ -12.5879    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ R        ║ W             ║  -1.60562   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ R        ║ R             ║  -4.24074   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ L        ║ F             ║  29.55      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ L        ║ R             ║ -15.7441    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ U        ║ W             ║   2.48056   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ U        ║ R             ║  -5.28966   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ R        ║ W             ║  -1.38893   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ R        ║ R             ║  -5.94636   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ L        ║ R             ║  -8.45144   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ U        ║ W             ║  13.9023    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ U        ║ R             ║  -6.73266   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ D        ║ W             ║  -2.4291    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ D        ║ R             ║  -2.88642   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ R        ║ W             ║  -2.10231   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ R        ║ R             ║  -4.99645   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ L        ║ W             ║  -1.46157   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ L        ║ R             ║  -5.17878   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ U        ║ F             ║  56.775     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ U        ║ R             ║  -3.16722   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ L        ║ W             ║  -1.36434   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ L        ║ R             ║  -4.65567   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ U        ║ W             ║  -2.13014   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ U        ║ R             ║  -4.45861   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ R        ║ W             ║  -1.33322   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ R        ║ R             ║  -8.52127   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ U        ║ R             ║  -8.74111   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ R        ║ W             ║  -1.33287   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ R        ║ R             ║  -7.16095   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ L        ║ F             ║  89.3482    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ L        ║ R             ║  -5.38249   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ U        ║ W             ║  -1.33348   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ U        ║ R             ║  -8.30666   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ D        ║ W             ║  -1.5811    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ D        ║ R             ║  -4.55832   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ R        ║ W             ║  -1.3378    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ R        ║ R             ║  -4.80857   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ L        ║ W             ║   1.68201   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ L        ║ R             ║ -12.4331    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ U        ║ W             ║  -1.33391   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ U        ║ R             ║  -6.16262   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ D        ║ W             ║  -1.33149   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ D        ║ R             ║ -12.1742    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ L        ║ W             ║  -1.77839   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ L        ║ R             ║  -6.54105   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ U        ║ W             ║  -1.33349   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ U        ║ R             ║  -4.31664   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ D        ║ W             ║  -1.33198   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ D        ║ R             ║  -5.00118   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        2 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        2 ║ U        ║ R             ║  -3.0502    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        5 ║ D        ║ F             ║  30         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        5 ║ D        ║ R             ║  -6.36293   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        7 ║ R        ║ W             ║  -1.33309   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        7 ║ R        ║ R             ║ -10.6112    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        7 ║ U        ║ W             ║   5.75      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        7 ║ U        ║ R             ║  -2.93224   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ R        ║ W             ║  -1.32596   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ R        ║ R             ║  -8.11338   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ L        ║ W             ║  -2.97971   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ L        ║ R             ║  -4.11271   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ U        ║ W             ║  -1.42072   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        8 ║ U        ║ R             ║  -4.22726   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ L        ║ W             ║  -1.43647   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ L        ║ R             ║  -6.11682   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ U        ║ W             ║  -1.33349   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ U        ║ R             ║  -2.39761   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ D        ║ W             ║  -1.30385   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     3 ║        9 ║ D        ║ R             ║  -8.79885   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        0 ║ R        ║ F             ║ 152.254     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        0 ║ R        ║ R             ║  -9.92277   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        0 ║ D        ║ W             ║  -1.33333   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        0 ║ D        ║ R             ║  -7.00613   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        1 ║ L        ║ W             ║  -1.33333   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        1 ║ L        ║ R             ║  -9.0959    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        1 ║ D        ║ W             ║  -2.92087   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        1 ║ D        ║ R             ║  -5.29584   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        3 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        3 ║ D        ║ R             ║ -16.8965    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        5 ║ U        ║ W             ║  -6.01243   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        5 ║ U        ║ R             ║ -18.0675    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        5 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        5 ║ D        ║ R             ║  -2.29578   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        9 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        9 ║ U        ║ R             ║  -4.15176   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        9 ║ D        ║ W             ║  -1.2154    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     4 ║        9 ║ D        ║ R             ║  -8.8386    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ R        ║ W             ║  43.1246    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ R        ║ R             ║  -4.0283    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ U        ║ W             ║  -2.28626   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ U        ║ R             ║  -5.65034   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ D        ║ W             ║  -1.33333   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        0 ║ D        ║ R             ║ -13.0997    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ L        ║ W             ║  -3.54674   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ L        ║ R             ║  -7.25703   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ U        ║ F             ║ 179.667     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ U        ║ R             ║  -4.00581   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        1 ║ D        ║ R             ║ -13.538     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        3 ║ U        ║ W             ║  -2.76005   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        3 ║ U        ║ R             ║ -13.4456    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        3 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        3 ║ D        ║ R             ║  -8.604     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ R        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ R        ║ R             ║ -12.6878    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ U        ║ F             ║ 119.426     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ U        ║ R             ║ -19.4167    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ D        ║ W             ║  -1.18311   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        5 ║ D        ║ R             ║  -8.62655   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ R        ║ W             ║  -1.45      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ R        ║ R             ║  -8.32082   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ L        ║ W             ║  28.8565    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ L        ║ R             ║ -19.3746    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ D        ║ W             ║  -1.30045   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        6 ║ D        ║ R             ║  -3.72675   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ R        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ R        ║ R             ║  -2.52292   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ L        ║ W             ║   6.21413   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ L        ║ R             ║ -13.7725    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ D        ║ W             ║  -1.47088   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        7 ║ D        ║ R             ║  -2.85862   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ R        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ R        ║ R             ║ -10.4206    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ L        ║ W             ║   0.553532  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ L        ║ R             ║  -8.72132   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ D        ║ W             ║  -1.8557    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        8 ║ D        ║ R             ║ -18.3257    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ L        ║ W             ║  -0.861617  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ L        ║ R             ║ -11.2375    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ U        ║ R             ║  -3.22622   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ D        ║ W             ║  -2.20144   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     5 ║        9 ║ D        ║ R             ║  -5.00476   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ R        ║ W             ║   9.72952   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ R        ║ R             ║ -10.5449    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ U        ║ W             ║   9.94838   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ U        ║ R             ║  -5.13524   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ D        ║ W             ║  -1.33332   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        0 ║ D        ║ R             ║ -24.076     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ R        ║ W             ║  -1.38171   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ R        ║ R             ║  -3.15806   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ L        ║ W             ║   1.20786   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ L        ║ R             ║  -9.53233   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ U        ║ W             ║  43.9167    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ U        ║ R             ║  -8.61342   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ D        ║ F             ║ 150.11      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        1 ║ D        ║ R             ║ -13.0095    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ R        ║ W             ║  -1.44032   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ R        ║ R             ║ -13.9141    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ L        ║ W             ║  36.2863    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ L        ║ R             ║  -7.16027   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ D        ║ W             ║  37.0812    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        2 ║ D        ║ R             ║  -7.1438    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ R        ║ W             ║  -1.50062   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ R        ║ R             ║  -6.65533   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ L        ║ W             ║  -2.60836   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ L        ║ R             ║  -4.07569   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ U        ║ W             ║  -1.72266   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ U        ║ R             ║  -3.08673   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ D        ║ W             ║   8.26424   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        3 ║ D        ║ R             ║ -10.2818    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ R        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ R        ║ R             ║  -3.28304   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ L        ║ W             ║  -1.28555   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ L        ║ R             ║  -3.43696   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ D        ║ W             ║   1.07023   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        4 ║ D        ║ R             ║ -20.5739    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ R        ║ W             ║  -1.34841   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ R        ║ R             ║  -4.5917    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ L        ║ W             ║  -0.732442  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ L        ║ R             ║  -5.17443   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ U        ║ W             ║  28.5192    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ U        ║ R             ║ -21.4389    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ D        ║ W             ║  -2.15106   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        5 ║ D        ║ R             ║  -3.37949   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ R        ║ W             ║  -1.42978   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ R        ║ R             ║  -7.26991   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ L        ║ W             ║  -1.18311   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ L        ║ R             ║ -10.581     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ U        ║ W             ║  -1.2475    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        6 ║ U        ║ R             ║  -8.93656   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ R        ║ W             ║  -1.73773   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ R        ║ R             ║  -6.40506   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ L        ║ W             ║  -2.06959   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ L        ║ R             ║  -5.87563   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ U        ║ W             ║  -1.2475    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        7 ║ U        ║ R             ║  -6.40825   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ R        ║ W             ║  -3.65443   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ R        ║ R             ║  -4.90922   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ L        ║ W             ║  -4.11387   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ L        ║ R             ║  -7.4735    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ U        ║ W             ║  -1.28069   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        8 ║ U        ║ R             ║  -6.99742   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        9 ║ L        ║ W             ║  -3.37441   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        9 ║ L        ║ R             ║  -3.91912   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        9 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     6 ║        9 ║ U        ║ R             ║  -4.75212   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ R        ║ F             ║ 179.656     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ R        ║ R             ║ -11.3353    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ U        ║ W             ║   1.47426   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ U        ║ R             ║ -14.8954    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ D        ║ W             ║  -1.33327   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        0 ║ D        ║ R             ║ -21.3922    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ R        ║ W             ║   0.680613  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ R        ║ R             ║  -7.13498   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ L        ║ W             ║  -1.33327   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ L        ║ R             ║ -26.2907    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ U        ║ W             ║   9.97917   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        1 ║ U        ║ R             ║ -17.508     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ R        ║ W             ║  -0.837766  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ R        ║ R             ║  -8.65988   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ L        ║ F             ║ 152.495     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ L        ║ R             ║  -9.41813   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ U        ║ W             ║  -1.26487   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        2 ║ U        ║ R             ║  -6.47112   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ R        ║ W             ║  -0.2581    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ R        ║ R             ║  -3.58917   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ L        ║ W             ║  37.1237    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ L        ║ R             ║  -9.12954   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ U        ║ W             ║  -0.757734  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        3 ║ U        ║ R             ║  -6.33079   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ R        ║ W             ║  -1.645     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ R        ║ R             ║  -6.37037   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ L        ║ W             ║   8.28092   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ L        ║ R             ║  -8.49476   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ U        ║ W             ║  -0.741566  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        4 ║ U        ║ R             ║  -6.48125   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        5 ║ L        ║ W             ║   1.07023   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        5 ║ L        ║ R             ║ -23.0728    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        5 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     7 ║        5 ║ U        ║ R             ║  -2.35932   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        0 ║ U        ║ R             ║ -15.0468    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        0 ║ D        ║ W             ║  -1.33306   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        0 ║ D        ║ R             ║ -18.9011    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        6 ║ R        ║ W             ║  16.5586    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        6 ║ R        ║ R             ║   6.81208   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        6 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        6 ║ D        ║ R             ║ -18.8243    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        7 ║ R        ║ W             ║  70.2344    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        7 ║ R        ║ R             ║  20.0113    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        7 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        7 ║ L        ║ R             ║  -4.53903   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ R        ║ W             ║  75.875     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ R        ║ R             ║  73.0729    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ L        ║ R             ║  13.6051    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ D        ║ F             ║ 284.938     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        8 ║ D        ║ R             ║  72.5594    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        9 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        9 ║ L        ║ R             ║  19.5823    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        9 ║ D        ║ T             ║ 307.5       ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     8 ║        9 ║ D        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        0 ║ R        ║ W             ║  -1.33224   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        0 ║ R        ║ R             ║ -22.6077    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        0 ║ U        ║ R             ║ -13.4926    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        1 ║ R        ║ W             ║  -1.32897   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        1 ║ R        ║ R             ║ -15.5924    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        1 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        1 ║ L        ║ R             ║ -23.0868    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        2 ║ R        ║ W             ║  -1.31586   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        2 ║ R        ║ R             ║ -36.7316    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        2 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        2 ║ L        ║ R             ║  -7.47318   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        3 ║ R        ║ W             ║  -1.26344   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        3 ║ R        ║ R             ║ -38.9662    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        3 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        3 ║ L        ║ R             ║ -21.6444    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        4 ║ R        ║ W             ║  -1.05377   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        4 ║ R        ║ R             ║ -31.043     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        4 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        4 ║ L        ║ R             ║ -34.6036    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        5 ║ R        ║ W             ║  -0.215088  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        5 ║ R        ║ R             ║ -23.4823    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        5 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        5 ║ L        ║ R             ║ -32.4893    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        6 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        6 ║ L        ║ R             ║ -22.8939    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        6 ║ U        ║ W             ║   3.13965   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        6 ║ U        ║ R             ║ -17.3342    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        8 ║ R        ║ T             ║ 299.75      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        8 ║ R        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        8 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        8 ║ U        ║ R             ║  16.5907    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        9 ║ L        ║ F             ║  30         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        9 ║ L        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        9 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     9 ║        9 ║ U        ║ R             ║  -2         ║
╚═══════╩══════════╩══════════╩═══════════════╩═════════════╝

Trying another maze¶

In [ ]:
M = "\
WWWBFWWWFWFWW \
WFBFBWFWWWWWW \
WWFWWWWWWWWWT"
     
initBoard = list(map(list, M.split()))
initBoard
Out[ ]:
[['W', 'W', 'W', 'B', 'F', 'W', 'W', 'W', 'F', 'W', 'F', 'W', 'W'],
 ['W', 'F', 'B', 'F', 'B', 'W', 'F', 'W', 'W', 'W', 'W', 'W', 'W'],
 ['W', 'W', 'F', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'T']]

Testing with

  • gamma = 0.25
  • alpha = 0.9
In [ ]:
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward -1 [#2] (1, 0) going R to:
getting reward 30 [#3] (1, 1) going D to:
getting reward -1 [#4] (2, 1) going R to:
getting reward 60 [#5] (2, 2) going R to:
getting reward -1 [#6] (2, 3) going U to:
getting reward 90 [#7] (1, 3) going D to:
getting reward -2 [#8] (2, 3) going R to:
getting reward -1 [#9] (2, 4) going R to:
getting reward -1 [#10] (2, 5) going U to:
getting reward -1 [#11] (1, 5) going R to:
getting reward 120 [#12] (1, 6) going U to:
getting reward -1 [#13] (0, 6) going R to:
getting reward -1 [#14] (0, 7) going R to:
getting reward 150 [#15] (0, 8) going R to:
getting reward -1 [#16] (0, 9) going R to:
getting reward 180 [#17] (0, 10) going R to:
getting reward -1 [#18] (0, 11) going D to:
getting reward -1 [#19] (1, 11) going D to:
getting reward -1 [#20] (2, 11) going R to:
getting reward 300 (2, 12)
Finished with path length:19, flags visited: 6, Total reward: 915, TotalQValueEarned: 1218.5138224907087

Results:

  • outcome: sucess
  • time: 5.5s

In [ ]:
drawGraph(q.getTable())
In [ ]:
print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═════════════╗
║   row ║   column ║ action   ║ toBlockType   ║       award ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ R        ║ W             ║  -1.51787   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ R        ║ R             ║ -11.119     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ D        ║ W             ║   7.45853   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        0 ║ D        ║ R             ║  -6.2912    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ R        ║ W             ║  -2.78977   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ R        ║ R             ║  -3.55771   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ L        ║ R             ║  -3.59151   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ D        ║ F             ║  29.7525    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        1 ║ D        ║ R             ║  -6.26808   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        2 ║ L        ║ R             ║  -3.2595    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ R        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        4 ║ R        ║ R             ║  -1.90666   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ R        ║ W             ║   8.47332   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ R        ║ R             ║  -3.19874   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ L        ║ F             ║ 148.143     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ L        ║ R             ║  -5.65727   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ D        ║ W             ║   7.60832   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        5 ║ D        ║ R             ║  -3.89871   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ R        ║ W             ║  39.2632    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ R        ║ R             ║  -6.79647   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ L        ║ W             ║  39.1056    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ L        ║ R             ║  -1.10232   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ D        ║ F             ║ 147.378     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        6 ║ D        ║ R             ║  -2.98684   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ R        ║ F             ║ 161.053     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ R        ║ R             ║ -12.3826    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ L        ║ W             ║   8.10054   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ L        ║ R             ║   4.72407   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ D        ║ W             ║  10.3725    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        7 ║ D        ║ R             ║  -6.66661   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ R        ║ W             ║  44.2107    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ R        ║ R             ║  -2.67308   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ L        ║ W             ║   1.02529   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ L        ║ R             ║  -9.85866   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ D        ║ W             ║   1.71016   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        8 ║ D        ║ R             ║  -5.93739   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ R        ║ F             ║ 180.843     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ R        ║ R             ║  -3.3629    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ L        ║ F             ║ 176.535     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ L        ║ R             ║  -7.68129   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ D        ║ W             ║   0.851649  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║        9 ║ D        ║ R             ║  -5.48837   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ R        ║ W             ║   3.37109   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ R        ║ R             ║   2.18628   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ L        ║ W             ║   1.16139   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ L        ║ R             ║  -2.05823   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ D        ║ W             ║   3.36224   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       10 ║ D        ║ R             ║  -3.0598    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ R        ║ W             ║  17.4722    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ R        ║ R             ║   9.98579   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ L        ║ F             ║ 151.252     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ L        ║ R             ║  -1.61019   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ D        ║ W             ║  17.4844    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       11 ║ D        ║ R             ║  10.701     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       12 ║ L        ║ W             ║  33.0318    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       12 ║ L        ║ R             ║  -7.03141   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       12 ║ D        ║ W             ║  73.8811    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     0 ║       12 ║ D        ║ R             ║  71.0846    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ R        ║ F             ║  33.8341    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ R        ║ R             ║  -3.05719   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ U        ║ R             ║  -3.45102   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ D        ║ W             ║   2.16267   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        0 ║ D        ║ R             ║  -7.3384    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ L        ║ R             ║  -1.77101   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ U        ║ W             ║  -1.89741   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ U        ║ R             ║  -4.91405   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ D        ║ W             ║  15.3365    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        1 ║ D        ║ R             ║  -6.98138   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        3 ║ D        ║ R             ║  -1.85077   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ R        ║ F             ║ 122.204     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ R        ║ R             ║  -6.4339    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ U        ║ W             ║  36.7851    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ U        ║ R             ║  31.2145    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ D        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        5 ║ D        ║ R             ║  -8.19663   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ R        ║ W             ║   8.81579   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ R        ║ R             ║ -10.1466    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ L        ║ W             ║   6.70478   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ L        ║ R             ║   5.27251   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ U        ║ W             ║   8.81579   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ U        ║ R             ║   3.98097   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ D        ║ W             ║  -0.988952  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        6 ║ D        ║ R             ║  -3.75501   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ R        ║ W             ║  39.2632    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ R        ║ R             ║  -4.63069   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ L        ║ F             ║ 147.601     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ L        ║ R             ║  -3.09543   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ U        ║ W             ║   4.81164   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ U        ║ R             ║  -8.38108   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ D        ║ W             ║  -1.31955   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        7 ║ D        ║ R             ║ -10.6264    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ R        ║ W             ║  11.4029    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ R        ║ R             ║   6.78658   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ L        ║ W             ║  -1.14463   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ L        ║ R             ║  -2.30378   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ U        ║ F             ║ 161.053     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ U        ║ R             ║  -2.44193   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ D        ║ W             ║  -0.770397  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        8 ║ D        ║ R             ║  -3.65276   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ R        ║ W             ║   7.81647   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ R        ║ R             ║  -0.184744  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ L        ║ W             ║   0.737197  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ L        ║ R             ║  -0.687621  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ U        ║ W             ║  44.2069    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ U        ║ R             ║  -5.97003   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ D        ║ W             ║   3.36757   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║        9 ║ D        ║ R             ║  -7.61126   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ R        ║ W             ║  17.4844    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ R        ║ R             ║  -1.27723   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ L        ║ W             ║  -0.0417402 ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ L        ║ R             ║  -8.80857   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ U        ║ F             ║ 207.81      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ U        ║ R             ║  -5.07646   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ D        ║ W             ║  17.4792    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       10 ║ D        ║ R             ║  16.4011    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ R        ║ W             ║  73.8853    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ R        ║ R             ║  72.9263    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ L        ║ W             ║   3.36894   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ L        ║ R             ║  -1.41263   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ U        ║ W             ║   6.70085   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ U        ║ R             ║  -1.41005   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ D        ║ W             ║  73.9375    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       11 ║ D        ║ R             ║  69.1557    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ L        ║ W             ║  17.4796    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ L        ║ R             ║   1.41473   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ U        ║ W             ║  16.877     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ U        ║ R             ║  15.6292    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ D        ║ T             ║ 299.727     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     1 ║       12 ║ D        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ R        ║ W             ║  12.4494    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ R        ║ R             ║  -9.22139   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        0 ║ U        ║ R             ║  -3.41317   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ R        ║ F             ║  65.3461    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ R        ║ R             ║ -10.4769    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ L        ║ W             ║  -2.95184   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ L        ║ R             ║  -3.45826   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ U        ║ F             ║  29.7193    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        1 ║ U        ║ R             ║  -8.58099   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ R        ║ W             ║  21.3843    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ R        ║ R             ║ -18.3832    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        2 ║ L        ║ R             ║  -7.66482   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ R        ║ W             ║   0.596937  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ R        ║ R             ║ -14.3834    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ L        ║ F             ║  30         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ L        ║ R             ║ -14.4163    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ U        ║ F             ║  89.5373    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        3 ║ U        ║ R             ║  -7.34304   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ R        ║ W             ║   6.38775   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ R        ║ R             ║  -2.42263   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        4 ║ L        ║ R             ║ -28.5435    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ R        ║ W             ║   2.21096   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ R        ║ R             ║  -2.554     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ L        ║ R             ║  -3.30415   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ U        ║ W             ║  29.551     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        5 ║ U        ║ R             ║  -1.99084   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ R        ║ W             ║   0.10991   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ R        ║ R             ║  -8.43652   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ L        ║ R             ║  -2.5144    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ U        ║ F             ║ 121.599     ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        6 ║ U        ║ R             ║  -3.71366   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ R        ║ W             ║  -0.729749  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ R        ║ R             ║  -4.81895   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ L        ║ W             ║  -1.36657   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ L        ║ R             ║  -4.39455   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ U        ║ W             ║  -0.4285    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        7 ║ U        ║ R             ║ -12.5497    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ R        ║ W             ║   3.37061   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ R        ║ R             ║  -6.07076   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ L        ║ W             ║   0.646063  ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ L        ║ R             ║ -14.8294    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ U        ║ W             ║  36.7839    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        8 ║ U        ║ R             ║ -12.12      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ R        ║ W             ║  17.4726    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ R        ║ R             ║  13.5112    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ L        ║ W             ║   7.27791   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ L        ║ R             ║  -8.21518   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ U        ║ W             ║  10.3567    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║        9 ║ U        ║ R             ║ -11.1886    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ R        ║ W             ║  73.9318    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ R        ║ R             ║  69.3085    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ L        ║ W             ║   2.35608   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ L        ║ R             ║  -4.38329   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ U        ║ W             ║   3.33362   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       10 ║ U        ║ R             ║  -5.68042   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ R        ║ T             ║ 299.75      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ R        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ L        ║ W             ║  16.39      ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ L        ║ R             ║  13.7864    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ U        ║ W             ║  17.1322    ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       11 ║ U        ║ R             ║   4.78121   ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       12 ║ L        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       12 ║ L        ║ R             ║  -2         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       12 ║ U        ║ W             ║  -1         ║
╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣
║     2 ║       12 ║ U        ║ R             ║  -2         ║
╚═══════╩══════════╩══════════╩═══════════════╩═════════════╝

Another maze ...¶

In [ ]:
M = "\
WWW \
FBB \
WWT"
     
initBoard = list(map(list, M.split()))
initBoard
Out[ ]:
[['W', 'W', 'W'], ['F', 'B', 'B'], ['W', 'W', 'T']]
In [ ]:
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to:
getting reward 30 [#2] (1, 0) going D to:
getting reward -1 [#3] (2, 0) going R to:
getting reward -1 [#4] (2, 1) going R to:
getting reward 300 (2, 2)
Finished with path length:3, flags visited: 1, Total reward: 327, TotalQValueEarned: 425.2109375
In [ ]:
drawGraph(q.getTable())
In [ ]:
print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═══════════╗
║   row ║   column ║ action   ║ toBlockType   ║     award ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        0 ║ R        ║ W             ║  -1.39742 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        0 ║ R        ║ R             ║  -8.71674 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        0 ║ D        ║ F             ║  34.3672  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        0 ║ D        ║ R             ║  -1.14615 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        1 ║ R        ║ W             ║  -1.62145 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        1 ║ R        ║ R             ║  -4.8522  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        1 ║ L        ║ W             ║  -1       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        1 ║ L        ║ R             ║  -8.08732 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        2 ║ L        ║ W             ║  -1       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     0 ║        2 ║ L        ║ R             ║  -6.93439 ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     1 ║        0 ║ U        ║ W             ║  -1       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     1 ║        0 ║ U        ║ R             ║  -4.1102  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     1 ║        0 ║ D        ║ W             ║  17.4688  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     1 ║        0 ║ D        ║ R             ║  12.7724  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        0 ║ R        ║ W             ║  73.875   ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        0 ║ R        ║ R             ║  72.4964  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        0 ║ U        ║ F             ║  30       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        0 ║ U        ║ R             ║   1.0746  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        1 ║ R        ║ T             ║ 299.5     ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        1 ║ R        ║ R             ║  -2       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        1 ║ L        ║ W             ║  -1       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        1 ║ L        ║ R             ║  15.9863  ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        2 ║ L        ║ W             ║  -1       ║
╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣
║     2 ║        2 ║ L        ║ R             ║  -2       ║
╚═══════╩══════════╩══════════╩═══════════════╩═══════════╝